/*
 * File Created: 2019-03-12 10:58:35 am
 * Author: shanhaohui
 * -----
 * Last Modified: 2019-03-12 12:05:43 pm
 * Modified By: shanhaohui
 * -----
 * Copyright (c) 2019 rongyi
 */

import axios from 'axios'
import { Message } from '@alifd/next'

let $axios = axios.create()

// 添加一个请求拦截器
$axios.interceptors.request.use(function (config) {
  // 在请求发送之前做一些事
  return requestReject(config)
}, function (error) {
  // 当出现请求错误是做一些事
  return requestResolve(error)
})

// 添加一个返回拦截器
$axios.interceptors.response.use(function (response) {
  // 对返回的数据进行一些处理
  return responseReject(response)
}, function (error) {
  // 对返回的错误进行一些处理
  return responseResolve(error)
})
// 请求处理
function requestReject (config) {
  // 可以对config.data做处理
  return config
}
// 请求网络失败处理
function requestResolve (error) {
  return showError(error, `当前请求存在问题`)
}
// 请求回来的处理
function responseReject (response) {
  if (!response) {
    showError(response, `当前请求存在问题`)
    return false
  }
  switch (parseInt(response.status)) {
    case -1:
    case 404:
      return showError(response, `请求失败,请重试`)
    case 200:
      let json = response.data

      if (json.meta) {
        var errno = json.meta.status || json.meta.errno

        var msg = json.meta.msg

        response.data.errno = errno
        response.data.msg = msg
        if (Number(errno) === 0) {

        } else if (/^\d{4}401$/.test(errno)) { // 登录失效

        } else {
          return showError(response, msg)
        }
      }

      break
    default:
      return showError(response, `当前网络存在问题【${response.statusText}】`)
  }
  return response
}
// 请求失败的处理
function responseResolve (error) {
  return showError(error, '请求失败，请重试')
}

// 显示错误
function showError (response, msg) {
  Message.error({
    title: msg,
    duration: 4000
  })
  return Promise.reject(response)
}

export default $axios
